# ifndef __LINEA__H_

# define __LINEA__H_

# include "figura.h"

# include "punto.h"

# include <algorithm>

using namespace std;

class Linea: public Figura
{
	public:
	
		Linea()
		{
		};
		
		Linea(Punto c, Punto d):pa(c), pb(d) 
		{
		};
		
		Linea(const Linea &l): Figura(l), pa(l.pa), pb(l.pb)
		{
		};
		
		~Linea()
		{
			pa.~Punto();
			
			pb.~Punto();
		};
		
		Punto getA() 
		{
			return (pa);
		};
		
		Punto getB() 
		{
			return (pb);
		};
		
		virtual void trasladar(float, float);
		
		void redimensionar(float, float);
		
		virtual Punto supIzq()
		{
			Punto p(min(pa.getX(), pb.getX()), max(pa.getY(), pb.getY())); 
			
			return (p);
		};
		
		virtual Punto infDer()
		{
			Punto p(max(pa.getX(), pb.getX()), min(pa.getY(), pb.getY())); 
			
			return (p);
		};
		
		virtual string Texto(int tab = 0)	
		{
			string ret = "";
			
			for (int i = 0; i < tab; i++) ret += '\t';
			
			ret += "Línea:\n" + pa.Texto(tab + 1) +  pb.Texto(tab + 1);
			
			return (ret);
		};
		
		virtual bool seleccionar(float, float);
		
		virtual bool contenida(Punto, Punto);
		
		virtual Linea* clonar ()
		{
			return (new Linea (*this));
		};
		
		virtual list<Figura*> pintar()
		{
			list<Figura*> ret;
			
			ret.push_back((Figura*)this->clonar());
			
			return ret;
		}
		
	private:
		
		Punto pa;
		
		Punto pb;
};

# endif
